package service;

import dao.RssChannelModelDAO;
import java.util.ArrayList;
import readerRSS.RssChannelModel;

/**
 *
 * @author Tania M
 */
public class ServiceRssChannel implements IUseHibernate {

    private RssChannelModel _obj;
    private RssChannelModelDAO _objDAO;

    //construira l'objet DAO à partir de l'objet modèle
    /**
     * 
     * @param obj
     */
    public ServiceRssChannel(RssChannelModel obj) {
        _obj = obj;
        _objDAO = new RssChannelModelDAO();
        _objDAO.setDatePub(obj.getDatePub());
        _objDAO.setDesc(obj.getDesc());
        _objDAO.setDocs(obj.getDocs());
        _objDAO.setLang(obj.getLang());
        _objDAO.setLink(obj.getLink());
        _objDAO.setWebmasterMail(obj.getWebmasterMail());
        _objDAO.setTitle(obj.getTitle());

        //_objDAO.setChannelItems(Arrays.asList(_obj.getChannelItems()));
        _objDAO.setChannelItems(ServiceRssItem.modelArrayListToDaoList(_obj.getChannelItems()));

        //_objDAO.setId(Double.NaN);
    }

    //construira l'objet modèle à partir du DAO
    /**
     * 
     * @param obj
     */
    public ServiceRssChannel(RssChannelModelDAO obj) {
        _objDAO = obj;
        _obj = new RssChannelModel();

        //_obj.setChannelItems((ArrayList)_objDAO.getChannelItems());
        _obj.setChannelItems(ServiceRssItem.daoListToModelArrayList(obj.getChannelItems()));

        _obj.setDatePub(obj.getDatePub());
        _obj.setDesc(obj.getDesc());
        _obj.setDocs(obj.getDocs());
        _obj.setLang(obj.getLang());
        _obj.setLink(obj.getLink());
        _obj.setTitle(obj.getTitle());
        _obj.setWebmasterMail(obj.getWebmasterMail());

    }

    /**
     * 
     */
    public ServiceRssChannel() {
    }

    /**
     * @return the _obj
     */
    public RssChannelModel getObj() {
        return _obj;
    }

    /**
     * @param obj the _obj to set
     */
    public void setObj(RssChannelModel obj) {
        this._obj = obj;
    }

    /**
     * @return the _objDAO
     */
    public RssChannelModelDAO getObjDAO() {
        return new RssChannelModelDAO(_objDAO);
    }

    /**
     * @param objDAO the _objDAO to set
     */
    public void setObjDAO(RssChannelModelDAO objDAO) {
        this._objDAO = objDAO;
    }

    //encapsulation des méthodes des classes DAO
    /**
     * 
     */
    @Override
    public void saveObject() {
        _objDAO.saveObject();
    }

    /**
     * 
     */
    @Override
    //Attention: charge TOUS les channels
    public void loadObjects() {
        RssChannelModelDAO.loadObjects();
    }
    
    //charge un seul channel passé en paramètre
    public void loadOneObject(String linkChosen) {
        RssChannelModelDAO loader = new RssChannelModelDAO();
        ArrayList<RssChannelModelDAO> theList = loader.loadOneObject(linkChosen);
        if(theList.size()>0){
            //si la requete a trouve quelque chose, on charge, sinon, on laisse a null
            _objDAO=theList.get(0);//le channel étant unique, il n'y a qu'un élément dans la arraylist
            daoToModel();
        }
    }

    //donne un channel spécifique identifié par son index
    /**
     * 
     * @param index
     * @return
     */
    public RssChannelModelDAO getDaoObject(int index) {
        RssChannelModelDAO _inter = new RssChannelModelDAO(RssChannelModelDAO.getList().get(index));
        return _inter;
    }

    /**
     * 
     */
    @Override
    public void create() {
        _objDAO.create();
    }

    /**
     * 
     */
    @Override
    public void read() {
        _objDAO.read();
    }

    /**
     * 
     */
    @Override
    public void update() {
        _objDAO.update();
    }

    /**
     * 
     */
    @Override
    public void delete() {
        _objDAO.delete();
    }

    //actualiser les objets
    /**
     * 
     */
    public void daoToModel() {
        if (_objDAO == null) {
            setObj(new RssChannelModel());
        }

        getObj().setChannelItems(null);

        getObj().setDatePub(_objDAO.getDatePub());
        getObj().setDesc(_objDAO.getDesc());
        getObj().setDocs(_objDAO.getDocs());
        getObj().setLang(_objDAO.getLang());
        getObj().setLink(_objDAO.getLink());
        getObj().setTitle(_objDAO.getTitle());
        getObj().setWebmasterMail(_objDAO.getWebmasterMail());
    }

    /**
     * 
     */
    public void modelToDao() {
        if (_objDAO == null) {
            _objDAO = new RssChannelModelDAO();
        }
        _objDAO.setDatePub(getObj().getDatePub());
        _objDAO.setDesc(getObj().getDesc());
        _objDAO.setDocs(getObj().getDocs());
        _objDAO.setLang(getObj().getLang());
        _objDAO.setLink(getObj().getLink());
        _objDAO.setWebmasterMail(getObj().getWebmasterMail());
        _objDAO.setTitle(getObj().getTitle());
        
        //_objDAO.setId(Double.NaN);

        _objDAO.setChannelItems(null);
    }
}
